var initPage = {
		
	defaults  : {
		url:jsContextPath+"/module/getModules.do",
		data:{},
		callBack:null,
		formId:'queryForm',
		backData:{},
		contactStr:'lsS',
		filterValue:'null'
	},
	
	initModule : function(option) {
		option = $.extend(true, initPage.defaults, option || {});
		var data = option.data || {};
		var moduleCodes = data["MODULE_CODE"] || getData();
		option.data["MODULE_CODE"] = moduleCodes;
		initPage.ajax(option);
	},
	
	ajax : function(option){
		$.ajax({
			   type: "POST",
			   url: option.url,
			   data: option.data,
			   dataType : 'json',
			   success: function(data){
			       //先执行init，再执行回调函数
			       initPage.initFrames(data);
			       
				   if($.isFunction(option.callBack)){
					   option.callBack(data);
				   }
			   }
		});
	},
	initFrames : function(data) {
		
		var module = data.module;
		
		if (module) {
			var pmodules = module.pmodules || [], modules = module.modules
					|| [],mCodes=data.mCodes||[];
			
			//缓存数据
			var backData=initPage.defaults.backData;
			backData.pmodules=pmodules,backData.modules=modules,backData.mCodes=mCodes;
			
			initPage.initModulesLoading();
			initPage.hideOtherLoading(backData.modules);
			initPage.topModuleHandler(pmodules);
			initPage.moduleHandler(modules);
		}
	},
	refreshFrames : function() {// 刷新module
		var backData = initPage.defaults.backData;
		var modules = backData.modules || [];
		for ( var i in modules) {
			var item = modules[i];
			var code = item['MODULE_CODE'], moduleDiv = $('#' + code);
			var hide = moduleDiv.is(':hidden');

			if (!hide) {
				initPage.moduleUrlHandler(item);
			} else {
				initPage.attrInit(moduleDiv, 0);
			}
		}
	},
	attrInit : function(el, value) {
		$(el).attr('init', value);
	},
	topModuleHandler : function(pList) {

		for ( var i in pList) {
			var item = pList[i];
			var code = item['MODULE_CODE'], div = $('#' + code), panel = div
					.find('.panel-content');
			// 顶级模块是否显示
			initPage.showModule(item,panel);
			var tab = div.find('ul');
			
			// tab页添加click事件
			if (tab.length > 0) {
				var menu = tab.find('li');

				menu.click(function() {
					var li = $(this);
					var moduleCode = li.find('a').attr('href'),
					    moduleDiv = $(moduleCode),
					    init=moduleDiv.attr('init');
					if (init != '1') {
						var module = initPage.findModule(moduleCode.replace('#',''));
						if(module){
							initPage.showModule(module);
							initPage.moduleUrlHandler(module);
							initPage.bindSelect(moduleDiv, module);
							initPage.attrInit(moduleDiv, 1);
						}
					}
				});

			}
		}
	},
	moduleHandler : function(mList) {

		for ( var i in mList) {
			var item = mList[i];
			var parentCode = item['PARENT_CODE'],
			    moduleCode = item['MODULE_CODE'], 
			    tabIndex = item['TAB_INDEX'],
			    url = item['URL'];
			
			var moduleDiv = $('#' + moduleCode);
			
			var flag=false;
			
			// tab页是否显示
			if (tabIndex && 1 === parseInt(tabIndex)) {
				initPage.showModule(item);
				flag = true;
			}
			
			//tab页为第一页或者tab页为空
			if (url) {
				if(!tabIndex || flag){
					initPage.moduleUrlHandler(item);
					initPage.bindSelect(moduleDiv, item);
				}
			}
		}
	},
	moduleUrlHandler : function(item) {//处理module的url
		
		if (!item) {
			return;
		}
		
		var moduleCode = item['MODULE_CODE'], 
		    parentCode = item['PARENT_CODE'], 
		    url = item['URL'],
		    module_page=item['MODULE_PAGE'],
		    tabIndex=item['TAB_INDEX'];
		
		var div=$('#'+moduleCode);
		var iframe = div.find('iframe');
		
		
		if(iframe.length>0 && url){
			//有多个iframe但是包含tab页，有父code,只显示子页的loading
			if(!tabIndex && parentCode){
				div=$('#'+parentCode);
			}
			
			initPage.iframeLoading({
				iframeEl : iframe[0],
				callback : function(options){
					div.hideLoading();
				}
			});
			
		}
		
		
		if (iframe.length > 0 && url) {
			if(url.indexOf('?')<0){
				url+="?1=1";
			}
		var params = initPage.getBoParam($('#' + initPage.defaults.formId));
		params += initPage.getBoParam($('#' + moduleCode + ' form'));
		if (parentCode && !tabIndex) {
			params += initPage.getBoParam($('#' + parentCode + ' .panel-bar form'));
		}
		
		
		//如果页面上有相同的下拉框则过滤主表单的查询条件保留报表上的查询条件
		var paramsArray = params.split("&");
		var paramsResult = '';
		for(var i = paramsArray.length-1 ; i >= 0 ; i-- ){
			var values = paramsArray[i].split('=');
			if(paramsResult.indexOf(values[0]) <= -1)
				paramsResult += '&'+values[0] + '=' + values[1];
		}
		
		
		url += paramsResult;
		
		initPage.attrInit(div, 1);
		if(module_page!=null&&module_page){
			url=jsContextPath+url;
		}
		iframe.attr('src', url);
		
		if(item['mapping']){
			$('#'+parentCode).find('iframe').parents('div').css('display','none');
			$(iframe).parents('div').css('display','block');
		}
	}

		return url;
	},
	findModule:function(code){//查找module
		var backData=initPage.defaults.backData;
		var modules=backData.modules||[];
		
		for(var i in modules){
			var item=modules[i];
			var moduleCode=item['MODULE_CODE'];
			if(code===moduleCode){
				return item;
			}
		}
	},
	showModule : function(item, div) {// 处理是否显示module
		if (!item) {
			return;
		}
		
		div=div||$('#'+item['MODULE_CODE']);
		var status = item['STATUS'];
		if ('0' === status) {
			var height=div.height();
			$('#'+item['MODULE_CODE']+' .panel-bar').css("display","none");
			var reason=item['REASON'];
			var reasonDiv = initPage.createReasonDiv(reason,'1','y','y');
			div.find('iframe').hide();
			div.find('.chart').prepend(reasonDiv);
			initPage.attrInit(div, 1);
			$(div).hideLoading();
		}
	},
	createReasonDiv:function(reason,type,resonBtn,backBtn,refreshBtn,icon){
		var nodataBox=$('<div class="nodataBox">');
		var nodataDesc='<div class="nodata">';
		var iconStr='';
		if(icon="table"||!icon){
			iconStr='<i class="table-nodata  icon-nodata"></i>';
		}
		nodataDesc+=iconStr;
		nodataDesc+='<div class="nodata-info"><p>';
		var reasonDiv=$('<div class="reason"></div>');
		var reasonContent='';
		if(type=='1'){
			nodataDesc+='当前业务系统数据暂时无法支持，<br />等待业务系统功能固化中......<br />';
		}else if(type=='2'){
			nodataDesc+='对不起，没有查询到对应的数据。<br />建议你换个查询条件或';
		}
		if(refreshBtn){
			nodataDesc+='<a href="javascript:'+refreshBtn+'">刷新</a>';
		}
		if(resonBtn&&resonBtn=='y'){
			nodataDesc+='点击<a href="javascript:;" class="js-reason-btn">查看原因</a></p></div></div>';
			reason=reason||'未填原因！';
			reasonContent+='<p>'+reason+'</p>';
		}
		
		if(backBtn&&backBtn=='y'){
			reasonContent+='<button class="js-kit-button js-kit-icon-back">返回</button>';
		}
		
		reasonDiv.append(reasonContent);             
		nodataBox.append(nodataDesc);
		nodataBox.append(reasonDiv);
		
		return nodataBox;
	},
	bindSelect : function(div,item) {//绑定所有下拉框选择事件
		
		var tabIndex=item['TAB_INDEX'],
		    parentCode=item['PARENT_CODE'],
		    moduleCode=item['MODULE_CODE'];
		
		//div里多个iframe（但不是tab页）
		if(!tabIndex&&parentCode){
			var parent=initPage.findModule(parentCode);
			var subFrames=parent.subFrames;
			if(!subFrames){
				subFrames=[];
			}
			subFrames.push(moduleCode);
			parent.subFrames=subFrames;
		}
		
		//绑定select事件
		var select = div.find('*[change="true"]');
		select.each(function() {
			// 把item缓存起来
				$(this)[0].moduleCfg = item;
				var sel=this;
				
				if(this.tagName=='SELECT'){
					//绑定autocompleteselect事件
					$(this).combobox('getInput').on('autocompleteselect',
							function(e, ui) {
								initPage.onSelect(sel);
							}
					);
				}
				
		});
		
	},
	/**
	 * 页面报表下拉框选择事件
	 */
	onSelect : function(sel){
		if(!sel.length){
			sel=this;
		}
		var moduleCfg = $(sel)[0].moduleCfg || {};
		var frames = moduleCfg.subFrames;
		var mapping = $(sel).attr('mapping');
		if(mapping){
			var mappingIds=$(sel).find('option');
			mappingIds.each(function(){
				var config=null;
				if($(this).val()){
					config=initPage.findModule($(this).attr('mappingID'));
					$("#"+config).showLoading({ "parent":"#"+config});
					if($(this).val()==sel.value){
						config.mapping = 'one-more';
						initPage.moduleUrlHandler(config);
					}else{
						config.mapping= null;
					}
				}
				
			});
			return;
		}else{
			$("#"+moduleCfg.MODULE_CODE).showLoading({ "parent":"#"+moduleCfg.MODULE_CODE});
		}
		
		if (frames) {
			for ( var i in frames) {
				var frame = frames[i];
				var config = initPage.findModule(frame);
				initPage.moduleUrlHandler(config);
			}
		} else {
			initPage.moduleUrlHandler(moduleCfg);
		}
	},
	/**绑定不同维度的下拉框选择事件
	 * options:[{
	 * id :下拉框Id,
	 * mappingID : 父级Module的CODE
	 * }]
	 */
	bindDiffBoSelect : function (options){ 
		var defaultOptions={ischange:true,ismapping:true};
		
		var elements = options.elements;
		 for(var i in elements){
			 var element = elements[i];
			 element = $.extend(defaultOptions,element);
			 
			 var el = '#'+element.id;
			 if(element.ischange){
				 $(el).attr('change','true');
			 }
			 
			 if(element.ismapping){
				 $(el).attr('mapping','true');
				 var iframes=$('#'+element.mappingID+' .chart');
				 $(el).find('option').each(function(i,el){
					 if(this.value){
						var num=i-1;
						 $(this).attr('mappingID',iframes[num].id) ;
					 }
						
				 });
			 }
		 }	
	},
	getBoParam : function (form,contactStr){
		var formParam=$(form).find('*[allowserialize!="no"]').serializeArray();
		var str='';
		for(var i =0;i< formParam.length;i++){
			var value=formParam[i].value;
			var name = formParam[i].name;
			if( !!(value+'')){
				contactStr!=undefined?name=contactStr+name:name=initPage.defaults.contactStr+name;
				str+="&"+name;
				str+="="+formParam[i].value;
			}
		}
		/*if(!noParseDate){//传给BO需要转换日期为>= or <=，传到java后台不需要此转换此参数
			str=str.replace(/(DATE_START)/g, 'DATE_START>').replace(/(DATE_END)/g, 'DATE_END<');
		}*/
		
		return str;
	},
	
	initIframeUrl : function (obj){
		var iframe=$('#'+obj.MODULE_CODE+' iframe');
		if(obj.TAB_INDEX && iframe.length>1){//一个功能对应多个报表
			//$('#'+obj.code+ ' div[name="'+obj.code+'_tb'+obj.TAB_INDEX+'" iframe').attr('src',obj.url);
			
			$(iframe)[parseInt(obj.TAB_INDEX) - 1].src = obj.url;
			
		}else{
			$(iframe).attr('src',obj.URL);
		}
	},
	
	iframeLoading : function(options) {
	    if(options.iframeEl.attachEvent) {
	    	options.iframeEl.attachEvent("onload", function() {
	            if(options.callback && typeof(options.callback) == "function") {
	            	options.callback(options);
	            }
	        });
	    } else {
	    	options.iframeEl.onload = function() {
	            if(options.callback && typeof(options.callback) == "function") {
	            	options.callback(options);
	            }
	        };
	    }
	},
	dateSelect_change : function (){
		var datebox=$('#date_select');
		$(datebox).combobox({
      		 select : function( event,ui ){
      			 $('#'+ui.item.value).show().find('input:hidden').removeAttr('allowSerialize');
      			 $('#dateSpan').html(ui.item.innerHTML);
      			 var otherDates=$('#'+ui.item.value).siblings();
      			 $(otherDates).find('input:hidden').attr('allowSerialize','no');
      			 $(otherDates).hide();
	      	 }
		});
	},
	//判断该报表是否包含tab选项
	isExistsTab : function (mcode){
		var tab = $('#'+mcode).find('li');
		if (tab.length > 0) {
			var moduleCode = $(tab[0]).find('a').attr('href');
			return moduleCode;
		}
		return null;
	},
	initModulesLoading : function (){
		var mCodes=getModuleCodes();
		if(mCodes.length>0){
			for(var i in mCodes){
				var tabFirst=initPage.isExistsTab(mCodes[i]);
				if(tabFirst!=null){
					$(tabFirst).showLoading({ "parent":tabFirst});
				}else{
					$("#"+mCodes[i]).showLoading({ "parent":"#"+mCodes[i]});
				}
			}
		}
	},
	//暂时没有做好的报表直接关闭loading
	hideOtherLoading : function (mCodes){
		var pageModules=getModuleCodes();
		var moduleCodes='';
		for(var i in mCodes){
			moduleCodes+=","+mCodes[i].MODULE_CODE;
		}
		
		for(var i in pageModules){
			if(moduleCodes.indexOf(pageModules[i])<0){
				var tabFirst=initPage.isExistsTab(pageModules[i]);
				if(tabFirst!=null){
					$(tabFirst).hideLoading();
				}else{
					$("#"+pageModules[i]).hideLoading();
				}
			}
		}
	},
	/**
	 * 给下面报表表单上相同的select赋主表单选中的值
	 * ids=['name1','name2']传报表上的select的name数组
	 */
	setSameSelValue : function(names){
		if(names!=null){
			for(var i in names){
				var selId=names[i];
				var selOpt=$('#'+selId+" option:selected");
				if(selOpt[0].value){
					var otherSel=$('select[name="'+selId+'"]');
					
					otherSel.each(function(){
						var $sel=$(this);
						if($sel[0].id!=selId){
							var option=$.select.addOption(selOpt[0].value,selOpt[0].innerHTML);
							$sel.empty().append(option);
							
							$sel.combobox('setOption', {
								value : selOpt[0].value
							});
						}
					});
					
				}
				
				
			}
		}
	}
		
};

//获取参数
function parseParam(param,separator){
	 separator=separator||'/';
	 var defParam={
		name:'',
		value:''
	 };
	 
	 $.extend(defParam,param);
	 
	 var names=defParam.name.split(separator),
	 values=defParam.value.split(separator);
	 
	 var paraMap={};
	 for(var i in names){
		 var item=names[i];
		 paraMap[item]=values[i];
	 }
	 return paraMap;
};

function getModuleCodes(){
	var codes=[];
	var n=0;
	$('.kit-col').each(function(i,dom){
		var moduleId=$(dom).attr('id');
		if(moduleId){
			codes[n++]=moduleId;
		}
		
	});
	return codes;
}
function getData(){
	var data=getModuleCodes().join(',');
	return data;
};

//获取url的参数，并转成map
function getParamsMap() {
	var search = window.location.search;
	search = search.replace('?', '');
	var arr = search.split('&');
	var map = {};
	var reg = new RegExp('^' + initPage.defaults.contactStr);

	for ( var i in arr) {
		var o = arr[i];
		var param = o.split('=');
		var name = param[0];
		name = name.replace(reg, '');
		var value = param.length > 1 ? param[1] : '';
		map[name] = decodeURI(decodeURI(value));
	}
	return map;
};

// 设置hidden参数到form元素里
function setParams(paraMap, el) {

	$el = $(el || '#queryForm');

	for ( var key in paraMap) {
		var obj = $el.find('*[name="' + key + '"]');
		if (0 === obj.length) {
			var paraValue = paraMap[key];
			var hidden = $('<input type="hidden"/>');
			hidden.attr( {
				'id' : key,
				'name' : key,
				'value' : paraValue
			});
			$el.append(hidden);
		}else if( 'INPUT' === obj[0].nodeName ){
			var value  = paraMap[key];
			obj.val( value ) ;
		}
	}
};

